/**
 * Classe que iplementarà l'accés a les dades de sessio HTTP com l'id per fer-les
 * servir a les classes IGestores
 */

package edu.uoc.tfc.exuoc.controladors;



import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.Preparable;
import org.apache.struts2.dispatcher.SessionMap;
import com.opensymphony.xwork2.ActionContext;
import org.apache.struts2.ServletActionContext;


//import edu.uoc.tfc.exuoc.controladors.GestorSessions;
import edu.uoc.tfc.exuoc.model.Sessio;

import java.util.Map;
/**
 *
 * @author emili
 */
public abstract class AbstractInGestor extends ActionSupport
        implements Preparable {

    //Control dels logs
    private GestorLogs  log=GestorLogs .getLogger(this.getClass().getName());
    private GestorSessions gs=null;
    
    //Identificador de sessió
    private String idSessio="";


    public String getIdSessio() {
        return idSessio;
    }

    public void setIdSessio(String idSessio) {
        this.idSessio = idSessio;
    }

    public GestorLogs  getLog() {
        return log;
    }

    public void setLog(GestorLogs  log) {
        this.log = log;
    }

    /**
     * Mètode que retorna true si un valor donat es troba dintre d'uns límits
     * @param pos
     * @param min
     * @param max
     * @return
     */
    public boolean comprovarLimits(int pos,int min,int max){
        boolean correcte=false;
        if ((min <= pos) && (pos<max)) correcte=true;
        return correcte;
    }





    @Override
    public void prepare(){
        this.init();
    }
    /**
     * Mètode que prepara les inicialitzacions pels IGestors amb l'idSessio 
     * controlada pel GestorSessions o la data de l'ultim accés.
     */
    private  void init() {
       //Emili 04-01-2012: SessionMap s= new SessionMap(ServletActionContext.getRequest());
        Map sessioHTTP = ActionContext.getContext().getSession();
       //Emili 14-01-2012: Boolean creat=false; //Variable de control d'obertura de GestorSessions

        try {
            this.setIdSessio((String)sessioHTTP.get("idSessio"));
            if (this.getIdSessio()!=null){
                if (gs==null) gs = new GestorSessions();
                    Sessio sessio=gs.cercar(this.getIdSessio());

                if (! gs.actualitzarDataSessio(this.getIdSessio())){
                    this.getLog().info("Data no actualitzada, Login:"+
                            sessio.getLogin());
                }else{ this.getLog().info("Login:"+sessio.getLogin().trim()
                        +": Últim accés:"+sessio.getDataInici().toString());

                }
            }
        }
        catch (NullPointerException e){
            this.getLog().error("AbstractIGestor:S'han trobat valors nulls. "
                    +e.getMessage());
            
        }catch(IllegalStateException e){
            this.getLog().error("AbstractIGestor: Accés erroni a les " +
                    "variables de sessió HTTP. "+e.getLocalizedMessage());
        }

        //Emili 14-01-2012:if (creat) gs=null;
        if (gs!=null) gs=null;

    }

/*     public static void main(String[] args){

       
    }*/



}
